package com.xunk.common.redis.lock;

import java.util.concurrent.TimeUnit;

/**
 * @ProjectName: HIM
 * @Package: com.xunk.common.redis.lock
 * @ClassName: IDistributeLock
 * @Author: luanzhiwei
 * @Description: 分布式锁接口
 * @Date: 2021/4/20 14:46
 * @Version: 1.0
 */
public interface IDistributeLock {
    /**
     * 非阻塞的，立即返回
     *
     * @param key       redis锁的value
     * @param leaseTime key有效时间,毫秒
     * @return
     */
    boolean tryLock(String key, long leaseTime);

    /**
     * 阻塞式，有等待超时时间，获取成功返回true，否则返回false
     *
     * @param key       Redis锁的value
     * @param leaseTime key有效时间，毫秒
     * @param waitTime  等待时间
     * @param timeUnit
     * @return
     */
    boolean tryLock(String key, long leaseTime, long waitTime, TimeUnit timeUnit);

    /**
     * 阻塞式，有等待超时时间，返回空
     *
     * @param key       redis锁的value
     * @param leaseTime 等待时间，毫秒
     */
    void lock(String key, long leaseTime);

    /**
     * 释放锁
     *
     * @param key redis锁的value
     */
    void releaseLock(String key);
}
